package com.ssy.lingxi.order.service.mobile;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.model.vo.basic.request.OrderAgreeVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderIdVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderReasonVO;
import com.ssy.lingxi.order.model.vo.basic.response.PayResultDetailVO;
import com.ssy.lingxi.order.model.vo.buyer.request.BuyerOrderPayVO;
import com.ssy.lingxi.order.model.vo.buyer.request.BuyerPayResultVO;
import com.ssy.lingxi.order.model.vo.buyer.request.BuyerReceiveVO;
import com.ssy.lingxi.order.model.vo.buyer.response.BuyerPayResultDetailVO;
import com.ssy.lingxi.order.model.vo.mobile.request.MobileManagePageVO;
import com.ssy.lingxi.order.model.vo.mobile.request.MobileOrderDeliveryTimeUpdateVO;
import com.ssy.lingxi.order.model.vo.mobile.request.MobilePageVO;
import com.ssy.lingxi.order.model.vo.mobile.response.*;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * App - 采购订单相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-09-22
 */
public interface IMobileBuyerOrderService {
    /**
     * APP-未发货调整订单送货时间
     * @param headers Http头部信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateDeliveryTime(HttpHeaders headers, MobileOrderDeliveryTimeUpdateVO updateVO);

    /**
     * 获取订单内部、外部状态列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<MobilePageItemVO> getPageItems(HttpHeaders headers);

    /**
     * 全部订单 - 分页查询订单
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileOrderManageQueryVO>> pageOrders(HttpHeaders headers, MobileManagePageVO pageVO);

    /**
     * 订单退款
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 退款结果
     */
    Wrapper<Void> orderRefund(HttpHeaders headers, OrderIdVO idVO);

    /**
     * 取消订单
     * @param headers Http头部信息
     * @param reasonVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> cancelOrder(HttpHeaders headers, OrderReasonVO reasonVO);

    /**
     * 全部订单 - 分页查询订单 - 订单删除
     * @param headers Http头部信息
     * @param idVO    接口参数
     * @return 操作结果
     */
    Wrapper<Void> pageOrderDelete(HttpHeaders headers, OrderIdVO idVO);

    /**
     * “待审核订单（一级）” - 分页查询订单列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileOrderQueryVO>> pageToValidateGradeOneOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待审核订单（一级）” - 审核
     * @param headers Http头部信息
     * @param agreeVO 接口参数
     * @return 审核结果
     */
    Wrapper<Void> validateOrderGradeOne(HttpHeaders headers, OrderAgreeVO agreeVO);

    /**
     * “待审核订单（二级）” - 分页查询订单列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileOrderQueryVO>> pageToValidateGradeTwoOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待审核订单（二级）” - 审核
     * @param headers Http头部信息
     * @param agreeVO 接口参数
     * @return 审核结果
     */
    Wrapper<Void> validateOrderGradeTwo(HttpHeaders headers, OrderAgreeVO agreeVO);

    /**
     * “待提交订单” - 分页查询订单列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileToSubmitOrderQueryVO>> pageToSubmitOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待提交订单” - 提交
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 审核结果
     */
    Wrapper<Void> submitValidateOrder(HttpHeaders headers, OrderIdVO idVO);

    /**
     * “待支付订单” - 分页查询订单列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileOrderQueryVO>> pageToPayOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待支付订单” - 查询支付方式与支付渠道列表
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<MobilePayTypeDetailVO>> getToPayOrderPayTypes(HttpHeaders headers, OrderIdVO idVO);

    /**
     * “待支付订单” - 订单支付
     * @param headers HttpHeader信息
     * @param payVO 接口参数
     * @return 支付链接（在线支付）
     */
    Wrapper<PayResultDetailVO> orderPay(HttpHeaders headers, BuyerOrderPayVO payVO);

    /**
     * “待支付订单” - 查询支付结果
     * @param headers HttpHeader信息
     * @param resultVO 接口参数
     * @return 支付结果
     */
    Wrapper<BuyerPayResultDetailVO> findPayResult(HttpHeaders headers, BuyerPayResultVO resultVO);

    /**
     * “待发货订单” - 查询订单列表
     * @param headers HttpHeader信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileToDeliveryOrderQueryVO>> pageToDeliveryOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待确认收货订单” -查询订单列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileOrderQueryVO>> pageToReceiveOrders(HttpHeaders headers, MobilePageVO pageVO);

    /**
     * “待确认收货订单” - 确认收货
     * @param headers Http头部信息
     * @param receiveVO 接口参数
     * @return 查询结果
     */
    Wrapper<Void> receiveOrder(HttpHeaders headers, BuyerReceiveVO receiveVO);

    /**
     * 采购订单详情
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileOrderDetailVO> findOrderDetail(HttpHeaders headers, OrderIdVO idVO);
}
